package com.ranyk.www.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Map;

/**
 * CLASS_NAME: ValidUtils.java <br/>
 *
 * @author ranyk           <br/>
 * @version V1.0           <br/>
 * @decription: 对象有效性验证工具类  <br/>
 * @date: 2022-04-02 <br/>
 */
@SuppressWarnings("unused")
public class ValidUtils {


    private ValidUtils() {
        throw new AssertionError();
    }

    /**
     * 判断字符串是否是符合指定格式的时间
     *
     * @param date   时间字符串
     * @param format 时间格式
     * @return 是否符合
     */
    public static boolean isDate(String date, String format) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            sdf.parse(date);
            return true;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断字符串有效性
     */
    public static boolean valid(String src) {
        return !(src == null || "".equals(src.trim()));
    }

    /**
     * 判断一组字符串是否有效
     *
     * @param src 需检测的字符串
     * @return 返回验证结果, 有效则返回 true;反之返回 false;
     */
    public static boolean valid(String... src) {
        for (String s : src) {
            if (!valid(s)) {
                return false;
            }
        }
        return true;
    }


    /**
     * 判断一个对象是否为空
     *
     * @param obj 需要判断的对象
     * @return 返回对象是否为 null
     */
    public static boolean valid(Object obj) {
        return null != obj;
    }

    /**
     * 判断一组对象是否有效
     *
     * @param objs 需要判断的对象
     * @return 返回判断结果, 当对象不为 null 且 传入的抓数组长度不为 0 则返回 true;否则返回 false;
     */
    public static boolean valid(Object... objs) {
        return objs != null && objs.length != 0;
    }

    /**
     * 判断集合的有效性
     */
    public static boolean valid(Collection<?> col) {
        return !(col == null || col.isEmpty());
    }

    /**
     * 判断一组集合是否有效
     *
     * @param cols 需要判断的集合对象
     * @return 有效返回 true;否则返回 false;
     */
    public static boolean valid(Collection<?>... cols) {
        for (Collection<?> c : cols) {
            if (!valid(c)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断map是否有效
     *
     * @param map 需要判断的 Map 集合
     * @return 返回严重结果
     */
    public static boolean valid(Map<?, ?> map) {
        return !(map == null || map.isEmpty());
    }

    /**
     * 判断一组map是否有效
     *
     * @param maps 需要判断map
     * @return 是否全部有效
     */
    public static boolean valid(Map<?, ?>... maps) {
        for (Map<?, ?> m : maps) {
            if (!valid(m)) {
                return false;
            }
        }
        return true;
    }
}
